package org.example.controller;

import org.example.dao.UserDao;
import org.example.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;

//用户控制器：登录，注销，获取用户信息
//注销返回重定向的网页，其他是ajax返回json
@Controller
public class UserController {

    //改造登录接口: 请求数据{"username":"xxx", "password":"123"..}
    //这样写是服务支持所有方法
//    @RequestMapping("/login")
    //支持post
    @PostMapping("/login")
    @ResponseBody
    public Object login(@RequestBody User user,
                        HttpServletRequest req){
        //构造一个返回数据(ok: boolean, error: String)
        Map<String, Object> body = new HashMap<>();
        //验证账号密码：先根据账号查询，结果是一条或没有数据
        User query = UserDao.queryByUsername(user.getUsername());
        //根据账号查不到数据，说明账号不存在
        if(query == null){
            body.put("ok", false);
            body.put("error", "账号不存在");
            //用户输入的密码和查询的用户密码不一样
        }else if(!query.getPassword().equals(user.getPassword())){
            body.put("ok", false);
            body.put("error", "账号或密码错误");
            //验证通过
        }else{
            body.put("ok", true);
            //登录成功，创建session，并保存用户信息
            HttpSession session = req.getSession();//创建session
            //在session中保存用户信息：保存数据库查询的用户，信息比较全
            session.setAttribute("user", query);
        }
        return body;
    }


    //获取用户信息
    //验证用户是否登录：@SessionAttribute且未登录获取到user就是null
    @GetMapping("/getUserInfo")
    @ResponseBody
    public Object getUserInfo(@SessionAttribute(value = "user", required = false) User user,
                              HttpServletResponse resp){
        //没有登录，不允许访问：返回401状态码
        if(user == null){
            resp.setStatus(401);
            return null;
        }
        return user;
    }

    @GetMapping("/logout")
    public String logout(HttpServletRequest req){
        //如果存在session，就让session失效
        HttpSession session = req.getSession(false);
        if(session != null){
            session.invalidate();
        }
        //重定向到登录页面
        return "redirect:/login.html";
    }
}
